// 迭代器
var _a;
// 迭代器（lterator）是一个函数或接口，为各种不同的数据结构提供一种访问机制。
// 任何数据接口只要部署 lterator 接口，就可完成办理操作。
// 1. es6 创造了一种新的遍历命令for...of 循环，lterator 接口主要提供for...of 消费
// 2. 原生具备iterator 接口的数据（可用for of 遍历）
//     a)Array
//     b)Arguments
//     c)Set
//     d)Map
//     e)String
//     f)typedArray
//     g)NodeList
// 3. 工作原理
//     a)创建一个指针对象，指向当前数据接口的起始位置
//     b)第一次调用对象的next方法，指针制动指向数据接口的第一个成员
//     c)接下来不断调用next方法，指针一直往后移动，直到指向最后一个成员
//     d)每调用next方法返回一个包含value（当前遍历的元素）和done（是否办理完毕，默认false没有遍历完）属性对象
// 自定义iterator迭代器
// 遍历以下对象，每次遍历输出obj.child 的每一项，并返回当前遍历状态
var obj = {
    name: 'iterator',
    child: ['li', 'wu', 'zhang', 'wang']
};
// 解：
var copyObj = (_a = {
        name: 'iterator',
        child: ['li', 'wu', 'zhang', 'wang']
    },
    _a[Symbol.iterator] = function () {
        var _this = this;
        var index = 0; //指向当前数据接口的起始位置
        return {
            next: function () {
                //调用next方法返回一个包含value（当前遍历的元素）和done（是否办理完毕，默认false没有遍历完）属性对象
                if (index.length < _this.child.length) {
                    var element = { value: _this.child[index], done: false };
                    index++;
                    return element;
                }
                else {
                    return { value: undefined, done: true };
                }
            }
        };
    },
    _a);
for (var _i = 0, copyObj_1 = copyObj; _i < copyObj_1.length; _i++) {
    var i = copyObj_1[_i];
    console.log(i);
}
// > li
// > wu
// > zhang
// > wang
